Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

User authentication forms- Invalid username or password

Îåêßíçóå áðü ôï ìÝëïò gio1283. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 02-10-2011, 20:05. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  24-09-2011, 19:36 67498

    User authentication forms- Invalid username or password

    Καλησπέρα,

    Προσπαθώ να φτιάξω ένα login (username, pass) και το pass να γίνεται hashed για να αποθηκεύετεαι κωδικοποιημένο στη βάση μου. Άκολουθώντας το παράδειγμα που βρίσκεται στο σύνδεσμο: http://msdn.microsoft.com/en-us/library/ff649202.aspx έχω κάνει επιτυχώς το register Του χρήστη αλλά μου βγάζει error στο login. όταν δηλαδή δίνω το σωστο username και pass Μου βγάζει το exception: Invalid username or password. Θα μπορούσε κάποιος να με βοηθήσει? Σας ευχαριστώ! O Κωδικας που έχω γράψει είναι:

    using System.Data;

    using System.Data.SqlClient;

    using System.Security.Cryptography;

    using System.Web.Security;

    public partial class Login : System.Web.UI.Page

    {

    protected void Page_Load(object sender, EventArgs e)

    {

    }

    private static string CreatePasswordHash(string pwd, string salt)

    {

    string saltAndPwd = String.Concat(pwd, salt);

    string hashedPwd =

    FormsAuthentication.HashPasswordForStoringInConfigFile(saltAndPwd, "SHA1");

    hashedPwd = String.Concat(hashedPwd, salt);

    return hashedPwd;

    } 

    private bool VerifyPassword(string suppliedUserName,

    string suppliedPassword )

    {

    bool passwordMatch = true;

    SqlConnection conn = new SqlConnection( @"Data Source=USER-PC;Initial Catalog=TestDB;User ID=sa;Password=123;");

    SqlCommand cmd = new SqlCommand( "LookupUser", conn );

    cmd.CommandType = CommandType.StoredProcedure;

    SqlParameter sqlParam = cmd.Parameters.Add("@username",SqlDbType.VarChar,20);

    sqlParam.Value = suppliedUserName;

    try

    {

    conn.Open();

    SqlDataReader reader = cmd.ExecuteReader();

    reader.Read();

    string dbPasswordHash = reader.GetString(0);

    int saltSize = 5;

    string salt = dbPasswordHash.Substring(dbPasswordHash.Length - saltSize);

    reader.Close();

    string hashedPasswordAndSalt = CreatePasswordHash(suppliedPassword, salt);

    passwordMatch = hashedPasswordAndSalt.Equals(dbPasswordHash);

    }

    catch (Exception ex)

    {

    throw new Exception("Exception verifying password. " +

    ex.Message);

    }

    finally

    {

    conn.Close();

    }

    return passwordMatch;

    }

    protected void btnLogin_Click(object sender, EventArgs e)

    {

    bool passwordVerified = true;

    try

    {

    passwordVerified =

    VerifyPassword(txtUsername1.Text, txtPass1.Text);

    }

    catch (Exception ex)

    {

    lblMessage.Text = ex.Message;

    return;

    }

    if (passwordVerified == true)

    {

    lblMessage.Text = "Logon successful: User is authenticated";

    }

    else

    {

    lblMessage.Text = "Invalid username or password";

    }

    }

    }

  •  02-10-2011, 15:28 67607 σε απάντηση της 67498

    Απ: User authentication forms- Invalid username or password

    any help please?
  •  02-10-2011, 19:56 67608 σε απάντηση της 67607

    Απ: User authentication forms- Invalid username or password

    Καλησπέρα, 

    Με μία γρήγορη ματιά που είχα ρίξει όταν είχες κάνει το 1ο post, ο κώδικας μου φάνηκε να είναι εντάξει. Ο κώδικας τρέχει κανονικά, δεν σου ρίχνει κάποιο exception, απλά δεν κάνει match τα username και password. Το μόνο που μπορώ να σκεφτώ είναι μήπως το password που είναι στη hashed αποθηκευμένο στη database είναι λάθος. Μήπως έχεις δηλαδή κάποιο bug στο κομμάτι κώδικα που αφορά το registration. 



    Τάσος Καραγιάννης

    Baby debugging steps...
  •  02-10-2011, 20:05 67609 σε απάντηση της 67607

    Απ: User authentication forms- Invalid username or password

    Το άρθρο στο οποίο αναφέρεσαι είναι αρχαίο. Από τo .ΝΕΤ 2.0 και μετά υπάρχει έτοιμος μηχανισμός και controls για forms authentication και δεν χρειάζεται να δημιουργήσεις τον κώδικα και τη βάση μόνος σου.  Το πως δουλεύει περιγράφεται στο Managing Users by Using Membership. Οι ρυθμίσεις που απαιτούνται περιγράφονται στο Configuring an ASP.NET Application to Use Membership, η δημιουργία της βάσης στο Creating and Configuring the Application Services Database for SQL Server  ενώ υπάρχουν και walkthroughs που ξεκινάνε από το βασικό site template όπως το Walkthrough: Creating a Web Site with Membership and User Login.

    Θα σου πρότεινα επίσης να δεις το Lesson 9: Membership and Login Controls από το Development For Beginners της Microsoft. Εδώ που τα λέμε, αξίζει να παρακολουθήσεις ολόκληρη τη σειρά για να δεις πως δουλεύει στην παρούσα μορφή του το ASP.NET.
     
    Όσον αφορά τον κώδικα που έφτιαξες, βάλε ένα breakpoint, κάνε debug και δες γιατί επιστρέφει αυτό το μήνυμα. Το μήνυμα το επιστρέφεις εσύ, όχι το σύστημα, οπότε θα πρέπει να βρεις στον κώδικα σου τί συμβαίνει. Για παράδειγμα, φορτώνεις το password από την βάση με τη χρήση της Lookup stored procedure - τί κάνει αυτή?

    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems